package com.tsy.server.system.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.tsy.server.common.PageResult;
import com.tsy.server.common.Result;
import com.tsy.server.system.entity.Organization;
import com.tsy.server.system.entity.dto.OrganizationDTO;
import com.tsy.server.system.entity.vo.OrganizationVO;
import com.tsy.server.system.service.OrganizationService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 组织管理控制器
 */
@Api(tags = "组织管理接口", description = "包含组织创建、加入、修改等功能")
@RestController
@RequestMapping("/org")
public class OrganizationController {

    @Autowired
    private OrganizationService organizationService;

    /**
     * 获取用户组织列表
     * @return 组织用户列表
     */
    @GetMapping("/userOrgList")
    @ApiOperation(value = "用户组织列表", notes = "分页获取用户组织列表信息")
    public Result<PageResult> userOrganizationList(OrganizationVO organizationVO) {
        Page<Organization> page = organizationService.getUserOrgList(organizationVO);
        return PageResult.toPageResult(page);
    }

    /**
     * 获取用户所有组织
     * @return 获取用户所有组织
     */
    @GetMapping("/userOrgs")
    @ApiOperation(value = "获取用户所有组织", notes = "获取用户所有组织信息")
    public Result<List<OrganizationVO>> getUserOrgs() {
        List<OrganizationVO> list = organizationService.getUserOrgs();
        return Result.success(list);
    }

    /**
     * 创建组织
     * @param organizationDTO 组织信息
     * @return 创建结果
     */
    @PostMapping("/create")
    @ApiOperation(value = "创建组织", notes = "创建一个新的组织")
    public Result<Void> createOrganization(@RequestBody OrganizationDTO organizationDTO) {
        organizationService.createOrganization(organizationDTO);
        return Result.success();
    }

    /**
     * 退出组织
     * @return 加入结果
     */
    @PostMapping("/leave/{orgId}")
    @ApiOperation(value = "退出组织", notes = "用户退出一个已存在的组织")
    public Result<Void> leaveOrganization(@PathVariable("orgId") Long orgId) {
        organizationService.leaveOrganization(orgId);
        return Result.success();
    }

    /**
     * 修改组织信息
     * @param organizationDTO 组织信息
     * @return 修改结果
     */
    @PutMapping("/update")
    @ApiOperation(value = "修改组织", notes = "修改组织的基本信息")
    public Result<Void> updateOrganization(@RequestBody OrganizationDTO organizationDTO) {
        organizationService.updateOrganization(organizationDTO);
        return Result.success();
    }

}